<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // - 公有属性和公有方法:设置给实例化对象原型的属性和方法被称作公有属性和公有方法
    // function Box(){
    //
    // }
    // // 公有属性(原型属性)
    // Box.prototype.userName = "lisi";
    // // 公有方法(原型方法)
    // Box.prototype.fn = function(){
    //
    // }
    // const obj = new Box();
    // const obj2 = new Box();
    // console.log(obj.fn === obj2.fn);
    // console.log(obj.__proto__ === obj2.__proto__);// true
    // console.log(obj.__proto__ === Box.prototype);// true
    // console.log(obj2.__proto__ === Box.prototype);// true



    // - 私有属性和私有方法:声明在构造函数中的变量或函数，被称作为私有属性和私有方法
    // function Box(){
    //     this.userName = "zhangsan";// 私有属性(实例属性);
    //     // 私有方法(实例方法)
    //     this.fn = function(){
    //
    //     }
    // }
    // const obj = new Box();
    // const obj2 = new Box();
    // console.log(obj.userName === obj2.userName);// true
    // obj.userName = "lisi";
    // console.log(obj.userName === obj2.userName);// false
    // console.log(obj.fn === obj2.fn);



    // - 静态属性和方法:`js`中无需实例化就可以调用的方法叫做静态方法。
    // {
    //     function axios(){
    //
    //     }
    //     // 静态属性
    //     axios.sex = "男";
    //     // 静态方法
    //     axios.get = function(){
    //         console.log("axios->get")
    //     }
    //     axios.get();
    // }


    // - 特权方法 :在构造函数内部通过this关键字定义的的方法，可以被实例化的对象调用。
    {
        const Box = function(){
            let a = 1;
            this.getA = function(){
                return a;
            };
            this.setA = function(v){
                a = v;
            }
        }
        const obj = new Box();
        console.log(obj.getA());
        obj.setA(100);
        console.log(obj.getA());// 100
    }
</script>
</html>